package com.shujia.base.day01

import scala.util.control.Breaks._

/*
    变量
    常量
    数组
    字符串
    if
    for循环
    while循环
    控制流程语句
 */
object Demo1Base {
  def main(args: Array[String]): Unit = {
    /**
     * 定义变量的注意事项：
     * 1、在scala中创建变量需要使用一个关键字：var
     * 2、定义变量的时候，可以不加数据类型，scala会进行自动类型推断
     * 3、变量一旦创建了，数据类型就确定了
     * 4、可以在创建变量的同时，明确给出数据类型
     * 语法： var 变量名:数据类型 = 变量值
     * 5、scala中的基本数据类型的写法和java的不太一样
     * java                       scala
     * byte                        Byte
     * short                       Short
     * int                         Int
     * long                        Long
     * float                       Float
     * double                      Double
     * boolean                     Boolean
     * char                        Char
     */
    //如何创建一个变量
    //1、在scala中创建变量需要使用一个关键字：var
    //创建一个int类型的变量
    //    var a1 = 10
    //    println(a1)
    //    //获取该变量的类型
    //    println(a1.getClass)
    //    a1 = 100
    //    println(a1)
    //    a1 = "hello"
    //    println(a1)

    //创建一个Int类型的变量a2
    var a2: Int = 100
    println(a2)

    //    println("====================================================")
    println("=" * 50) // 调用“*”这个函数，将“=”拼接了50次，底层是由StringBuilder实现的
    //    println("=".*(50))

    /**
     * 常量：在程序运行过程中，其值不能发生改变的量
     * 定义常量的注意事项：
     * 1、定义常量，使用关键字val
     */
    //定义一个Int类型的常量
    val b1: Int = 100
    println(b1)
    //    b1 = 200
    //    println(b1)
    println("=" * 50)

    /**
     * 字符串
     * 注意事项：
     * 1、scala中的字符串数据类型和java中的字符串数据类型是一样的，String类
     * 2、可以使用java中String类中的所有方法
     *
     *
     * 数组
     * 1、scala中提供了一个类：Array专门表示数组的类型
     * 2、scala中的数组，和java中的数组一样，也是有索引的，索引也是从0开始的
     * 3、scala中的数组若想通过索引获取元素，得使用小括号
     */
    //    var s1:String = "hello,world,java,spark,flink"
    //调用String类中的方法，将字符串按照指定分隔符进行切分
    //    val arr1: Array[String] = s1.split(",")
    //    println(arr1)
    //获取数组中的第一个元素
    //    println(arr1(0))
    //    println(arr1(1))
    //    println(arr1(2))
    //    println(arr1(3))
    //    println(arr1(4))
    //
    //    println("="*50)
    /**
     * 字符串创建的方式
     */
    //字符串如何表示
    //方式1：使用一对双引号表示
    //    var s2 = "hello"
    //    var s2 = "select" +
    //      "*" +
    //      "from" +
    //      "where"
    //    println(s2)

    //方式2：使用一对三个双引号
    //当字符串很长且需要换行的时候【写sql的时候】
    //    var s3 = """hello"""
    //    var s3 =
    //    """select
    //      |*
    //      |from
    //      |students
    //      |where
    //      |id='1001'
    //      |""".stripMargin
    //   println(s3)
    /**
     * 字符串格式化的方式
     * 1、和java一样使用 + ,只能是字符串常量之间相加
     * 2、使用java中的类，例如StringBuilder
     * 3、当存在一个序列【数组或迭代器】的时候，调用方法构建一个字符串
     * 4、【在scala中最常用的】 s函数构建字符串
     */
    var s1: String = "hello"
    var s2: String = "world"
    //    println("hello" + "_" + "world")

    //    val sb: StringBuilder = new StringBuilder()
    //    sb.append("hello").append("_").append("world")
    //    println(sb)

    //    var s1:String = "hello,world,java,flink,spark"
    //    val arr1: Array[String] = s1.split(",")
    //    val s2: String = arr1.mkString("|")
    //    println(s2)

    println(s"${s1} _ ${s2}")

    println("=" * 50)
    /**
     * 运算符，大多数都是函数
     * 注意：scala中没有++和--的运算符
     */
    var a = 3
    var b = 4
    println(s"a+b的值为：${a + b}")
    println(s"a-b的值为：${a - b}")
    println(s"a*b的值为：${a * b}")
    println(s"a/b的值为：${a * 1.0 / b}")
    println(s"a%b的值为：${a % b}")

    //将变量a的值+1
    //    a = a + 1
    //    a++
    a += 1
    println(s"a的值为: ${a}")
    println("=" * 50)

    /**
     * 控制流程语句
     */
    /**
     * if语句
     *
     */
    //    val sc = new Scanner(System.in)
    //    println("请输入您的年龄：")
    //    val age: Int = sc.nextInt()
    //    if(age>=18){
    //      println("已经成年！")
    //    }else{
    //      println("您还未成年！")
    //    }

    println("=" * 50)
    /**
     * for循环
     * scala中的for循环不能写成和java一样的普通for循环或增强for循环
     */
    val arr1: Array[String] = Array("hello", "world", "java", "hello", "spark", "flink")
    //    for(var i:Int = 0;i<arr1.length;i+=1){
    //      println(arr1(i))
    //    }
    //    for(Int i : arr1){
    //      println(i)
    //    }

    //scala中的for循环
//    for (i <- arr1) {
//      println(i)
//    }
    println("=" * 50)
    /**
     * while循环
     */
//    var index = 0
//    while(index<arr1.length){
//      println(arr1(index))
//      index+=1
//    }
//    var index = 0
//    do{
//      println(arr1(index))
//      index+=1
//    }while(index<arr1.length)

    //需求：在控制台输出10行hello world
    //实现1：使用while循环
//    var i = 10
//    while(i>0){
//      println("hello world")
//      i-=1
//    }
    //实现2：使用for循环
//    for(i <- 1 to 10){ // [1,10]
//      println("hello world")
//    }

//    for(i <- 1 until 10){  // [1,10)
//      println("hello world")
//    }

    /**
     * 控制流程语句
     *  continue ×
     *  break   ×
     *  return
     *
     *  注意：scala中，不存在continue和break关键字
     */
    //遍历1-10，当遍历到5的时候结束
    breakable{
      for (i <- 1 to 10) {
        if (i == 5) {
          break
        }
        println(i)
      }
    }


    println("张成阳真帅！")
    //。。。



  }
}
